package cn.cdeden.resource.domain.vo;

import cn.cdeden.common.oss.enumd.OssModuleType;
import cn.cdeden.resource.api.domain.RemoteFilesBucketPath;
import cn.cdeden.resource.domain.SysOss;
import cn.cdeden.resource.domain.SysOssSlice;
import cn.cdeden.resource.domain.SysOssVersion;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.github.linpeilie.annotations.AutoMapper;
import io.github.linpeilie.annotations.AutoMappers;
import lombok.*;
import cn.cdeden.common.translation.annotation.Translation;
import cn.cdeden.common.translation.constant.TransConstant;
import org.dromara.easyes.annotation.IndexField;

import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
import java.util.List;

/**
 * OSS对象存储视图对象 sys_oss
 *
 * @author Lion Li
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@AutoMappers( {
    @AutoMapper(target = SysOss.class),
    @AutoMapper(target = SysOssVersion.class)
})
public class SysOssVo implements Serializable {

    @Serial
    private static final long serialVersionUID = 1L;

    /**
     * 对象存储主键
     */
    private Long ossId;


    /**
     * 租户编号
     */
    private String tenantId;


    /**
     * 文件名
     */
    private String fileName;

    /**
     * 原名
     */
    private String originalName;

    /**
     * 获取文件名+后缀名
     * @return
     */
    public String getOriginalNameInfo(){
        return this.originalName+"."+this.fileSuffix;
    };


    /**
     * 文件后缀名
     */
    private String fileSuffix;

    /**
     * URL地址
     */
    private String url;

    /**
     * 封面文件名
     */
    private String coverName;

    /**
     * 封面URL地址
     */
    private String coverUrl;

    /**
     * 创建部门
     */
    private Long createDept;

    /**
     * 创建时间
     */
    private Date createTime;

    /**
     * 上传人
     */
    private Long createBy;

    /**
     * 上传人名称
     */
    @Translation(type = TransConstant.USER_ID_TO_NAME, mapper = "createBy")
    private String createByName;

    /**
     * 更新者
     */
    private Long updateBy;

    /**
     * 更新时间
     */
    private Date updateTime;


    /**
     * 服务商
     */
    private String service;

    /**
     *  模块类型
     **/
    private String moduleType;

    /**
     * 模块类型
     * @return
     */
    public OssModuleType getModuleTypeInfo(){
        return OssModuleType.findCoedInfo(moduleType);
    }


    /**
     * 模块类型名称
     */
    @Translation(type =TransConstant.OSS_MODULE_TYPE_TO_NAME ,mapper = "moduleType")
    private String moduleName;


    /**
     * 桶名称
     **/
    private String bucketName;

    /**
     * 文件大小
     **/
    private Long fileSize;

    /**
     * 文件的MD5
     **/
    private String fileMd5;

    /**
     * 版本号
     **/
    private String versionId;

    /**
     * 版本名称
     **/
    private String versionName;


    /**
     * es主键
     */
    private String esId;


    /**
     * 模块id
     */
    private String moduleId;


    /**
     * es信息 权限
     */
    private EsInfo esPurview;

    /**
     * 分片信息
     */
    private SysOssSlice sliceInfo;


    public SysOssVo setEsInfo(List<String> userIdList,List<String> roleIdList,List<String> deptIdList,List<String> postIdList) {
        this.esPurview = new EsInfo(userIdList,roleIdList,deptIdList,postIdList);
        return this;
    }

    public SysOssVo setEsInfo(RemoteFilesBucketPath upload) {
        this.esPurview = new EsInfo(upload.getUserIdList(), upload.getRoleIdList(), upload.getDeptIdList(), upload.getPostIdList());
        return this;
    }
    public SysOssVo setModuleIdInfo(String moduleId) {
        this.moduleId =  moduleId;
        return this;
    }



    @Getter
    @AllArgsConstructor
    public class EsInfo {
        /**
         * 哪些用户拥有该文件
         */
        private List<String> userIdList;

        /**
         * 哪些角色拥有该文件
         */
        private List<String> roleIdList;

        /**
         * 哪些部门拥有该文件
         */
        private List<String> deptIdList;

        /**
         * 哪些岗位拥有该文件
         */
        private List<String> postIdList;
    }



}
